package org.dppc.fine4j.objmanager;

import java.lang.annotation.Annotation;
import java.util.List;

import org.dppc.fine4j.objmanager.exceptions.DuplicateObjectException;

/**
 * 对象管理器
 * 
 * @author maomh
 *
 */
public interface ObjManager {
	
	/**
	 * 根据类型获取对象
	 * 
	 * @param clazz
	 * @return
	 */
	<T> T getObject(Class<T> clazz) throws DuplicateObjectException ;
	
	/**
	 * 根据对象名字获取对象
	 * 
	 * @param objName
	 * @return
	 */
	Object getObject(String objName);
	
	/**
	 * 根据超类获取所有对象
	 * 
	 * @param superClass
	 * @return
	 */
	<T> List<T> getObjectsBySuper(Class<T> superClass);
	
	/**
	 * 根据注解获取所有对象
	 * 
	 * @param annoClass
	 * @return
	 */
	List<Object> getObjectsByAnnotation(Class<? extends Annotation> annoClass);
	
	/**
	 * 获取管理的所有对象的名字
	 * 
	 * @return
	 */
	String[] getAllObjectNames();
}
